1. The Field of the Invention
The present invention relates to automated software testing. More particularly, the present invention relates to methods, systems, and computer program products for testing software components without explicitly having to specify each test or test environment.
2. Background and Related Art
Testing is an integral part of the software development process. As applications are written, developers often run their code to test the particular features being added or enhanced to assure that the developer's code operates as intended. While testing, developers frequently uncover programming errors, either in the form of erroneous design (what the developer thought would work does not) or erroneous implementation (correctly designed, but improperly coded).
The testing performed by a developer, however, tends to be limited in scope, time, and environment. For example, developers tend to test what they perceive as representative scenarios without the benefit of a formal test plan. These representative scenarios usually are directed to a single feature or small set of features, rather than the feature or small set of features in the context of an overall application. In most cases, this approach is reasonable because the developer's primary responsibility is to add or enhance the feature, and therefore testing, while important, is a secondary consideration. Furthermore, because the developer often is limited to testing within his or her personal development environment, it usually is impractical for the developer to account for the large number of hardware and software environments in which end-users will put the feature to use.
Due to the limited nature of developer testing, most software development organizations include a dedicated software testing group. This software testing group is responsible for producing thorough test plans and then conducting tests in accordance with those test plans. Because the testing group's primary responsibility is testing, tests may be developed for individual features, as well as those individual features in the context of an overall application. Testing groups usually assemble a wide range of hardware and software environments that are representative of supported end-user environments.
In order to increase the amount of testing that can be performed; testing groups typically employ some form of automated testing. This allows a single tester to write test code for a particular feature within a particular environment so that the test can be repeated as often as desired. One drawback to automated testing, however, is the overhead associated with developing and maintaining tests for each relevant environment. With traditional automated software testing, tests are customized to each particular environment, which essentially requires writing a new test to cover a new environment. Furthermore, traditional automated software testing offers limited flexibility for combining one or more existing tests into a single group of tests, which typically requires writing a new combined test for each of the combinations of interest. Accordingly, methods, systems, and computer program products are desired for testing software components without explicitly having to specify each test or test environment.